/*******************************************************
> Copyright (C) 2024 ==iot== All rights reserved.
> File Name: 5.c
> Author: wyf
> Created Time: 2024年09月02日 星期一 17时55分20秒
***************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open_file();
int read_file(int fd);
//在一个文件中统计汉字的个数。 思考汉字在文件中的存储形式(UTF-8编码)。

int main(int argc, const char* argv[])
{
    int fd = open_file();
    read_file(fd);
    return 0;
}

//打开文件
int open_file()
{
    int fd = open("../test_data/1.txt", O_RDWR);
    if (fd < 0)
    {
        perror("open");
        return -1;
    }
    return fd;
}
//读取文件判断其是否为汉字
int read_file(int fd)
{
    int bit = 0;
    char buf[1024] = {0};
    int count = 0;
    int ret = read(fd, buf, sizeof(buf));
    if (ret < 0)
    {
        perror("read");
        return -1;
    }
    // 遍历读取的每一个字节
    for (int i = 0; i < ret; i++)
    {
        unsigned char first_byte = buf[i];


        if (first_byte >= 0x80)// 判断是否为汉字
        {

            if ((first_byte & 0xF0) == 0xE0)
            {

                if (i + 2 < ret &&
                    (buf[i + 1] & 0xC0) == 0x80 && 
                    (buf[i + 2] & 0xC0) == 0x80)  
                {

                    unsigned int unicode_char = ((first_byte & 0x0F) << 12) |
                        ((buf[i + 1] & 0x3F) << 6) |
                        (buf[i + 2] & 0x3F);

 
                    if (unicode_char >= 0x4E00 && unicode_char <= 0x9FA5)
                    {
                        count++;
                    }

                    i += 2; 
                }
            }
        }
    }

    printf("%d\n", count);
    return 0;
}
